package com.zyl.add;

import java.util.concurrent.CountDownLatch;

/**
 * @author zhaoyl
 * @date 2024/5/15 23:07
 * @description 说明
 *  CountDownLatch 计数器
 *  CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。
 * CountDownLatch 定义了一个计数器，和一个阻塞队列， 当计数器的值递减为0之前，阻塞队列里面的线程处于挂起状态，
 * 当计数器递减到0时会唤醒阻塞队列所有线程，这里的计数器是一个标志，可以表示一个任务一个线程，也可以表示一个倒计时器，
 * CountDownLatch可以解决那些一个或者多个线程在执行之前必须依赖于某些必要的前提业务先执行的场景。
 */
public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
        //总数是6，必须要执行任务的时候再使用
        CountDownLatch countDownLatch =   new CountDownLatch(6);
        for (int i=1;i<=6;i++){
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+"线程开始..");
                countDownLatch.countDown();// -1操作
            },String.valueOf(i)).start();
        }
        countDownLatch.await();//等待计数器归零，然后再向下执行
        System.out.println("执行完成--关闭");
    }
}
